package simple.string;

/**
 * <a href="https://leetcode.cn/problems/reverse-words-in-a-string-iii/">557. 反转字符串中的单词 III</a>
 * 给定一个字符串 s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 * 示例 1：
 *   输入：s = "Let's take LeetCode contest"
 *   输出："s'teL ekat edoCteeL tsetnoc"
 * 示例 2:
 *   输入： s = "God Ding"
 *   输出："doG gniD"
 * 提示：
 *   1 <= s.length <= 5 * 104
 *   s 包含可打印的 ASCII 字符。
 *   s 不包含任何开头或结尾空格。
 *   s 里 至少 有一个词。
 *   s 中的所有单词都用一个空格隔开。
 * @author 刘学松
 * @date 2023-06-02 8:52
 */
public class 反转字符串中的单词III {
    public String reverseWords(String s) {
        char[] chars = s.toCharArray();
        int start = 0;
        for (int i = 0; i < chars.length; i++) {
            if (chars[i] == ' ') {
                reverse(chars, start, i-1);
                start = i+1;
            }
        }
        reverse(chars, start, chars.length-1);
        return new String(chars);
    }

    public void reverse(char[] chars, int start, int end) {
        while (start < end) {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            ++start;
            --end;
        }
    }
}
